<?php
namespace framework\tools;
class Image{
    private $mime;
    private $src_file;
    private $thumb_path;//存储缩略图的存放地址
    private $create_func=array(
        'image/png'=>'imagecreatefrompng',
        'image/jpeg'=>'imagecreatefromjpeg',
        'image/gif'=>'imagecreatefromgif',
    );
    private $output_func=array(
        'image/png'=>'imagepng',
        'image/jpeg'=>'imagejpeg',
        'image/gif'=>'imagegif',
    );
    public function __construct($src_file)
    {
        if(!file_exists($src_file)){
//            如果文件不存在的时候
            die('文件不存在');
        }else{
            $this->src_file=$src_file;
            $this->getMime($src_file);
        }

    }

    private function getMime($src_file){
        $info=getimagesize($src_file);
        $this->mime=$info['mime'];
    }
    private function get_create_func(){
        return $this->create_func[$this->mime];
    }

    private function get_output_func(){
        return $this->output_func[$this->mime];
    }
    public function setThumbPath($path=''){
        //缩略图的存放地址
        if(!is_dir($path)){
            $this->thumb_path=THUMB_PATH;
        }else{
            $this->thumb_path=$path;
        }
    }
//    生成缩略图的方法
    public function makeThumb($area_w,$area_h){
//        $dst_image=imagecreatetruecolor(50,50);
        $create_func=$this->get_create_func();//返回的创建图像的方法名
        $src_image=$create_func($this->src_file);
        $dst_x=0;
        $dst_y=0;
        $src_x=0;
        $src_y=0;

        $src_w=imagesx($src_image);
        $src_h=imagesy($src_image);
        if($src_w>=$src_h){
            $dst_w=$area_w;
            $dst_h=(int)$src_h/($src_w/$area_w);
        }else{
            $dst_h=$area_h;
            $dst_w=$src_w/($src_h/$area_h);
        }
        $dst_image=imagecreatetruecolor($dst_w,$dst_h);

        if($this->mime='image/png'){
//            如果是png格式的图像 背景变成透明色
            $color=imagecolorallocate($dst_image,255,255,255);
            imagecolortransparent($dst_image,$color);//设置透明色
            imagefill($dst_image,0,0,$color);
        }

        imagecopyresampled($dst_image,$src_image,$dst_x,$dst_y,$src_x,$src_y,$dst_w,$dst_h,$src_w,$src_h);

//        获取输出图像资源的方法
        $output_func=$this->get_output_func();
        $sub_path=date('Ymd'.'/');
        $filename=basename($this->src_file);

        if(!is_dir($this->thumb_path.$sub_path)){
//            第一次进入的时候没有这个目录 我们自己创建一下
            mkdir($this->thumb_path.$sub_path,0777,true);
        }

        $output_func($dst_image,$this->thumb_path.$sub_path.'thumb_'.$filename);
        imagedestroy($src_image);
        imagedestroy($dst_image);
        return $sub_path.'thumb_'.$filename;
    }
}